From c357843ef63f9ffdb1cd2393182daf19036fd3fb Mon Sep 17 00:00:00 2001 From: Brion Vibber Date: Tue, 22 Apr 2008 18:04:49 +0000 Subject: [PATCH] Fix event hooking for suggest. Works around bug with custom search form destinations on Wikipedia; multiple event handlers for form submission were overwriting each other --- includes/DefaultSettings.php | 2 +- skins/common/mwsuggest.js | 20 ++++++++++++++------ 2 files changed, 15 insertions(+), 7 deletions(-) diff --git a/includes/DefaultSettings.php b/includes/DefaultSettings.php index a782a5d144..4ec5eb16dd 100644 --- a/includes/DefaultSettings.php +++ b/includes/DefaultSettings.php @@ -1334,7 +1334,7 @@ $wgCacheEpoch = '20030516000000'; * to ensure that client-side caches don't keep obsolete copies of global * styles. */ -$wgStyleVersion = '137'; +$wgStyleVersion = '138'; # Server-side caching: diff --git a/skins/common/mwsuggest.js b/skins/common/mwsuggest.js index c27c6a218d..53dbcf941b 100644 --- a/skins/common/mwsuggest.js +++ b/skins/common/mwsuggest.js @@ -660,18 +660,26 @@ function os_eventOnsubmit(e){ return true; } +function os_hookEvent(element, hookName, hookFunct) { + if (element.addEventListener) { + element.addEventListener(hookName, hookFunct, false); + } else if (window.attachEvent) { + element.attachEvent("on" + hookName, hookFunct); + } +} + /** Init Result objects and event handlers */ function os_initHandlers(name, formname, element){ var r = new os_Results(name, formname); // event handler - element.onkeyup = function(event) { os_eventKeyup(event); }; - element.onkeydown = function(event) { os_eventKeydown(event); }; - element.onkeypress = function(event) { os_eventKeypress(event); }; - element.onblur = function(event) { os_eventBlur(event); }; - element.onfocus = function(event) { os_eventFocus(event); }; + os_hookEvent(element, "keyup", function(event) { os_eventKeyup(event); }); + os_hookEvent(element, "keydown", function(event) { os_eventKeydown(event); }); + os_hookEvent(element, "keypress", function(event) { os_eventKeypress(event); }); + os_hookEvent(element, "blur", function(event) { os_eventBlur(event); }); + os_hookEvent(element, "focus", function(event) { os_eventFocus(event); }); element.setAttribute("autocomplete","off"); // stopping handler - document.getElementById(formname).onsubmit = function(event){ return os_eventOnsubmit(event); }; + os_hookEvent(document.getElementById(formname), "onsubmit", function(event){ return os_eventOnsubmit(event); }); os_map[name] = r; // toggle link if(document.getElementById(r.toggle) == null){ -- 2.20.1